﻿using System;

namespace Common.Core.Exceptions
{
    /// <summary>
    /// 异常辅助类
    /// </summary>
    public class ExceptionHelper
    {
        /// <summary>
        /// 获取友好的错误提示信息
        /// </summary>
        /// <param name="ex">错误</param>
        /// <param name="statusCode">http状态code</param>
        /// <returns></returns>
        public static string GetFriendlyExceptionMsg(Exception ex, int statusCode = 200)
        {
            var msg = "";
            switch (statusCode)
            {
                case 500:
                    msg = "服务器系统内部错误";
                    break;

                case 401:
                    msg = "未登录";
                    break;

                case 400:
                    msg = "提交数据校验格式错误，请检查";
                    break;

                case 403:
                    msg = "无权限执行此操作";
                    break;

                case 404:
                    msg = "未找到页面";
                    break;

                case 405:
                    msg = "未知请求";
                    break;

                case 408:
                    msg = "请求超时";
                    break;
                case 200:
                    //if (ex is AbpValidationException exception)
                    //{
                    //    if (exception.ValidationErrors.Any())
                    //    {
                    //        foreach (var exceptionValidationError in exception.ValidationErrors)
                    //        {
                    //            if (!string.IsNullOrEmpty(msg))
                    //            {
                    //                msg += ",";
                    //            }

                    //            msg += exceptionValidationError.ErrorMessage;
                    //        }

                    //        msg += "!";
                    //    }

                    //    if (string.IsNullOrEmpty(msg))
                    //    {
                    //        msg = "传入参数格式错误或传入参数验证失败";
                    //    }
                    //}
                    break;
            }
            return msg;
        }

        /// <summary>
        /// 获取statusCode为200时的异常提示
        /// </summary>
        /// <param name="ex"></param>
        /// <returns></returns>
        private static string GetOtherFriendlyExceptionMsg(Exception ex)
        {
            var msg = $"无法完成指定操作，{ex.Message}";
            if (ex.GetType() == typeof(BusinessException) || ex.GetType() == typeof(BusinessException))
            {
                msg = ex.Message;
            }
            else if (ex.InnerException != null)
            {
                msg = GetOtherFriendlyExceptionMsg(ex.InnerException);
            }
            else
            {
                if (ex.Message.Contains("约束") && ex.Message.Contains("违反"))
                {
                    msg = $"无法完成指定操作，数据库约束冲突，请检查。";
                }
            }
            return msg;
        }
    }
}
